home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch6i < prev    next >
Encoding:
Internet Message Format  |  1989-11-27  |  59.3 KB

  1. Path: uunet!zephyr.ens.tek.com!tekgen!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v08i062:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch6i
  5. Message-ID: <4851@tekred.CNA.TEK.COM>
  6. Date: 22 Nov 89 19:52:58 GMT
  7. Sender: nobody@tekred.CNA.TEK.COM
  8. Lines: 1930
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 8, Issue 62
  13. Archive-name: NetHack3/Patch6i
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 9 (of 15)."
  25. # Contents:  patches06i
  26. # Wrapped by billr@saab on Wed Nov 22 11:10:41 1989
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'patches06i' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'patches06i'\"
  30. else
  31. echo shar: Extracting \"'patches06i'\" \(57020 characters\)
  32. sed "s/^X//" >'patches06i' <<'END_OF_FILE'
  33. X*** src/Old/mondata.c    Sun Nov 19 13:46:38 1989
  34. X--- src/mondata.c    Sun Nov 19 09:25:29 1989
  35. X***************
  36. X*** 1,4 ****
  37. X! /*    SCCS Id: @(#)mondata.c    3.0    89/01/10
  38. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  39. X  /* NetHack may be freely redistributed.  See license for details. */
  40. X  
  41. X--- 1,4 ----
  42. X! /*    SCCS Id: @(#)mondata.c    3.0    89/11/19
  43. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  44. X  /* NetHack may be freely redistributed.  See license for details. */
  45. X  
  46. X***************
  47. X*** 61,68 ****
  48. X  breakarm(ptr)    /* creature will break out of armor */
  49. X      register struct permonst *ptr;
  50. X  {
  51. X!     return(bigmonst(ptr) || (!verysmall(ptr) && !humanoid(ptr))
  52. X! #ifdef HARD
  53. X             || ptr == &mons[PM_MARILITH]
  54. X  #endif
  55. X             );
  56. X--- 61,68 ----
  57. X  breakarm(ptr)    /* creature will break out of armor */
  58. X      register struct permonst *ptr;
  59. X  {
  60. X!     return(bigmonst(ptr) || (ptr->msize > MZ_SMALL && !humanoid(ptr))
  61. X! #ifdef INFERNO
  62. X             || ptr == &mons[PM_MARILITH]
  63. X  #endif
  64. X             );
  65. X***************
  66. X*** 77,83 ****
  67. X  sliparm(ptr)    /* creature will slide out of armor */
  68. X      register struct permonst *ptr;
  69. X  {
  70. X!     return(!bigmonst(ptr) && (verysmall(ptr) || ptr == &mons[PM_GHOST]));
  71. X  }
  72. X  #endif
  73. X  
  74. X--- 77,84 ----
  75. X  sliparm(ptr)    /* creature will slide out of armor */
  76. X      register struct permonst *ptr;
  77. X  {
  78. X!     return(ptr->msize < MZ_LARGE &&
  79. X!            (ptr->msize <= MZ_SMALL || ptr == &mons[PM_GHOST]));
  80. X  }
  81. X  #endif
  82. X  
  83. X***************
  84. X*** 162,168 ****
  85. X      else if (!strncmp(str, "an ", 3)) str += 3;
  86. X  
  87. X      /* Some irregular plurals */
  88. X! #ifdef HARD
  89. X      if (!strncmp(str, "incubi", 6)) return PM_INCUBUS;
  90. X      if (!strncmp(str, "succubi", 7)) return PM_SUCCUBUS;
  91. X  #endif
  92. X--- 163,169 ----
  93. X      else if (!strncmp(str, "an ", 3)) str += 3;
  94. X  
  95. X      /* Some irregular plurals */
  96. X! #ifdef INFERNO
  97. X      if (!strncmp(str, "incubi", 6)) return PM_INCUBUS;
  98. X      if (!strncmp(str, "succubi", 7)) return PM_SUCCUBUS;
  99. X  #endif
  100. X***************
  101. X*** 234,240 ****
  102. X      if (mtmp->data->mflags1 & M1_FEM) return 1;
  103. X      if (mtmp->data == &mons[PM_CAVEMAN]
  104. X          || mtmp->data == &mons[PM_PRIEST]
  105. X! #ifdef HARD
  106. X          || mtmp->data == &mons[PM_INCUBUS]
  107. X  #endif
  108. X                          ) return 0;
  109. X--- 235,241 ----
  110. X      if (mtmp->data->mflags1 & M1_FEM) return 1;
  111. X      if (mtmp->data == &mons[PM_CAVEMAN]
  112. X          || mtmp->data == &mons[PM_PRIEST]
  113. X! #ifdef INFERNO
  114. X          || mtmp->data == &mons[PM_INCUBUS]
  115. X  #endif
  116. X                          ) return 0;
  117. X***************
  118. X*** 327,338 ****
  119. X  
  120. X  int
  121. X  bigmonst(ptr) struct permonst *ptr; {
  122. X!     return((ptr->mflags1 & M1_BIG) != 0L);
  123. X  }
  124. X  
  125. X  int
  126. X  verysmall(ptr) struct permonst *ptr; {
  127. X!     return((ptr->mflags1 & M1_VSMALL) != 0L);
  128. X  }
  129. X  
  130. X  int
  131. X--- 328,339 ----
  132. X  
  133. X  int
  134. X  bigmonst(ptr) struct permonst *ptr; {
  135. X!     return(ptr->msize >= MZ_LARGE);
  136. X  }
  137. X  
  138. X  int
  139. X  verysmall(ptr) struct permonst *ptr; {
  140. X!     return(ptr->msize < MZ_SMALL);
  141. X  }
  142. X  
  143. X  int
  144. X***************
  145. X*** 569,586 ****
  146. X      return((ptr->mflags1 & M1_PRINCE) != 0L);
  147. X  }
  148. X  
  149. X! # ifdef HARD
  150. X  int
  151. X  is_ndemon(ptr) struct permonst *ptr; {
  152. X      return(is_demon(ptr) &&
  153. X          (ptr->mflags1 & (M1_LORD | M1_PRINCE)) == 0L);
  154. X  }
  155. X! # else /* HARD */
  156. X  int
  157. X  is_ndemon(ptr) struct permonst *ptr; {
  158. X      return(ptr == &mons[PM_DEMON]);
  159. X  }
  160. X! # endif /* HARD */
  161. X  
  162. X  int
  163. X  is_dlord(ptr) struct permonst *ptr; {
  164. X--- 570,587 ----
  165. X      return((ptr->mflags1 & M1_PRINCE) != 0L);
  166. X  }
  167. X  
  168. X! # ifdef INFERNO
  169. X  int
  170. X  is_ndemon(ptr) struct permonst *ptr; {
  171. X      return(is_demon(ptr) &&
  172. X          (ptr->mflags1 & (M1_LORD | M1_PRINCE)) == 0L);
  173. X  }
  174. X! # else
  175. X  int
  176. X  is_ndemon(ptr) struct permonst *ptr; {
  177. X      return(ptr == &mons[PM_DEMON]);
  178. X  }
  179. X! # endif
  180. X  
  181. X  int
  182. X  is_dlord(ptr) struct permonst *ptr; {
  183. X*** src/Old/monmove.c    Sun Nov 19 13:47:18 1989
  184. X--- src/monmove.c    Wed Nov  8 22:56:55 1989
  185. X***************
  186. X*** 43,50 ****
  187. X              !(here->diggable & W_NONDIGGABLE)) {
  188. X          if(flags.soundok && flags.verbose && !rn2(5))
  189. X                 You("hear the sound of crashing rock.");
  190. X!         here->typ = DOOR;
  191. X!         here->doormask = D_NODOOR;
  192. X          }
  193. X      }
  194. X      /* Eats away door if present & closed or locked */
  195. X--- 43,55 ----
  196. X              !(here->diggable & W_NONDIGGABLE)) {
  197. X          if(flags.soundok && flags.verbose && !rn2(5))
  198. X                 You("hear the sound of crashing rock.");
  199. X!         if(!is_maze_lev) {
  200. X!           here->typ = DOOR;
  201. X!           here->doormask = D_NODOOR;
  202. X!         }
  203. X!         else
  204. X!           here->typ = ROOM;
  205. X!         mnewsym(mtmp->mx, mtmp->my);
  206. X          }
  207. X      }
  208. X      /* Eats away door if present & closed or locked */
  209. X***************
  210. X*** 52,62 ****
  211. X--- 57,69 ----
  212. X          (here->doormask & (D_LOCKED | D_CLOSED))) {
  213. X          if(here->doormask & D_TRAPPED) {
  214. X              here->doormask = D_NODOOR;
  215. X+             mnewsym(mtmp->mx, mtmp->my);
  216. X              if(mb_trapped(mtmp)) return(FALSE);
  217. X          } else {
  218. X              if(!rn2(3) && flags.verbose) /* not too often.. */
  219. X                  You("feel an unexpected draft of air.");
  220. X              here->doormask = D_BROKEN;
  221. X+             mnewsym(mtmp->mx, mtmp->my);
  222. X          }
  223. X          }
  224. X      else return TRUE; /* it doesn't leave rocks if it didn't dig */
  225. X***************
  226. X*** 132,138 ****
  227. X  
  228. X      *inrange = (dist2(mtmp->mx, mtmp->my, mtmp->mux, mtmp->muy) <=
  229. X                              (BOLT_LIM * BOLT_LIM));
  230. X!     *nearby = (dist2(mtmp->mx, mtmp->my, mtmp->mux, mtmp->muy) < 3);
  231. X  
  232. X      /* Note: if your image is displaced, the monster sees the Elbereth
  233. X       * at your displaced position, thus never attacking your displaced
  234. X--- 139,145 ----
  235. X  
  236. X      *inrange = (dist2(mtmp->mx, mtmp->my, mtmp->mux, mtmp->muy) <=
  237. X                              (BOLT_LIM * BOLT_LIM));
  238. X!     *nearby = monnear(mtmp, mtmp->mux, mtmp->muy);
  239. X  
  240. X      /* Note: if your image is displaced, the monster sees the Elbereth
  241. X       * at your displaced position, thus never attacking your displaced
  242. X***************
  243. X*** 232,238 ****
  244. X      /* check distance and scariness of attacks */
  245. X      distfleeck(mtmp,&inrange,&nearby,&scared);
  246. X  
  247. X! #ifdef HARD    /* Demonic Blackmail!!! */
  248. X      if(nearby && is_demon(mdat) && mtmp->mpeaceful && !mtmp->mtame) {
  249. X          if (mtmp->mux != u.ux || mtmp->muy != u.uy) {
  250. X              pline("%s whispers something to thin air.",
  251. X--- 239,245 ----
  252. X      /* check distance and scariness of attacks */
  253. X      distfleeck(mtmp,&inrange,&nearby,&scared);
  254. X  
  255. X! #ifdef INFERNO        /* Demonic Blackmail!!! */
  256. X      if(nearby && is_demon(mdat) && mtmp->mpeaceful && !mtmp->mtame) {
  257. X          if (mtmp->mux != u.ux || mtmp->muy != u.uy) {
  258. X              pline("%s whispers something to thin air.",
  259. X***************
  260. X*** 619,638 ****
  261. X              /* can't lock out shk */
  262. X              if(btrapped) {
  263. X              here->doormask = D_NODOOR;
  264. X              if(mb_trapped(mtmp)) return(2);
  265. X              } else {
  266. X              if (flags.verbose) {
  267. X                  if (canseeit)
  268. X!                    You("see a door being unlocked and opened.");
  269. X                  else if (flags.soundok)
  270. X                     You("hear a door being unlocked and opened.");
  271. X                  }
  272. X                  here->doormask = D_ISOPEN;
  273. X              }
  274. X          } else if (here->doormask == D_CLOSED && 
  275. X                      !nohands(mtmp->data)) {
  276. X              if(btrapped) {
  277. X              here->doormask = D_NODOOR;
  278. X              if(mb_trapped(mtmp)) return(2);
  279. X              } else {
  280. X                  if (flags.verbose) {
  281. X--- 626,651 ----
  282. X              /* can't lock out shk */
  283. X              if(btrapped) {
  284. X              here->doormask = D_NODOOR;
  285. X+             mnewsym(mtmp->mx, mtmp->my);
  286. X+             if (canseeit) prl(mtmp->mx,mtmp->my);
  287. X              if(mb_trapped(mtmp)) return(2);
  288. X              } else {
  289. X              if (flags.verbose) {
  290. X                  if (canseeit)
  291. X!                   You("see a door being unlocked and opened.");
  292. X                  else if (flags.soundok)
  293. X                     You("hear a door being unlocked and opened.");
  294. X                  }
  295. X                  here->doormask = D_ISOPEN;
  296. X+             mnewsym(mtmp->mx, mtmp->my);
  297. X+             if (canseeit) prl(mtmp->mx,mtmp->my);
  298. X              }
  299. X          } else if (here->doormask == D_CLOSED && 
  300. X                      !nohands(mtmp->data)) {
  301. X              if(btrapped) {
  302. X              here->doormask = D_NODOOR;
  303. X+             mnewsym(mtmp->mx, mtmp->my);
  304. X+             if (canseeit) prl(mtmp->mx,mtmp->my);
  305. X              if(mb_trapped(mtmp)) return(2);
  306. X              } else {
  307. X                  if (flags.verbose) {
  308. X***************
  309. X*** 642,652 ****
  310. X--- 655,669 ----
  311. X                       You("hear the sound of a door opening.");
  312. X                  }
  313. X                  here->doormask = D_ISOPEN;
  314. X+             mnewsym(mtmp->mx, mtmp->my);
  315. X+             if (canseeit) prl(mtmp->mx,mtmp->my);
  316. X              }
  317. X          } else if(here->doormask & (D_LOCKED | D_CLOSED)) {
  318. X              /* mfndpos guarantees monster is a giant */
  319. X              if(btrapped) {
  320. X              here->doormask = D_NODOOR;
  321. X+             mnewsym(mtmp->mx, mtmp->my);
  322. X+             if (canseeit) prl(mtmp->mx,mtmp->my);
  323. X              if(mb_trapped(mtmp)) return(2);
  324. X              } else {
  325. X                  if (flags.verbose) {
  326. X***************
  327. X*** 658,666 ****
  328. X                  if (here->doormask & D_LOCKED && !rn2(2))
  329. X                      here->doormask = D_NODOOR;
  330. X                  else here->doormask = D_BROKEN;
  331. X              }
  332. X          }
  333. X!         }
  334. X          /* Maybe a rock mole just ate something? */
  335. X          if(can_tunnel) if(!mdig_tunnel(mtmp)) return(2); /* died? */
  336. X  
  337. X--- 675,685 ----
  338. X                  if (here->doormask & D_LOCKED && !rn2(2))
  339. X                      here->doormask = D_NODOOR;
  340. X                  else here->doormask = D_BROKEN;
  341. X+             mnewsym(mtmp->mx, mtmp->my);
  342. X+             if (canseeit) prl(mtmp->mx,mtmp->my);
  343. X              }
  344. X          }
  345. X!           }
  346. X          /* Maybe a rock mole just ate something? */
  347. X          if(can_tunnel) if(!mdig_tunnel(mtmp)) return(2); /* died? */
  348. X  
  349. X*** src/Old/mthrowu.c    Sun Nov 19 13:50:51 1989
  350. X--- src/mthrowu.c    Tue Oct 31 11:04:38 1989
  351. X***************
  352. X*** 28,50 ****
  353. X      struct obj *obj;
  354. X      register char *name;
  355. X  {
  356. X!     char buf[BUFSZ];
  357. X      boolean acidic = (obj && obj->otyp == ACID_VENOM);
  358. X  
  359. X-     setan(name, buf);
  360. X      if(u.uac + tlev <= rnd(20)) {
  361. X          if(Blind || !flags.verbose) pline("It misses.");
  362. X!         else You("are almost hit by %s!", buf);
  363. X          return(0);
  364. X      } else {
  365. X          if(Blind || !flags.verbose) You("are hit!");
  366. X!         else You("are hit by %s!", buf);
  367. X  #ifdef POLYSELF
  368. X          if (obj && obj->otyp == SILVER_ARROW && (u.ulycn != -1 ||
  369. X                  is_demon(uasmon) || u.usym == S_VAMPIRE ||
  370. X                  (u.usym == S_IMP && u.umonnum != PM_TENGU))) {
  371. X              dam += rnd(20);
  372. X!             pline("You feel the %sarrow sear your flesh!",
  373. X                  Blind ? "" : "silver ");
  374. X          }
  375. X          if (acidic && resists_acid(uasmon))
  376. X--- 28,49 ----
  377. X      struct obj *obj;
  378. X      register char *name;
  379. X  {
  380. X!     char *oname = an(name);
  381. X      boolean acidic = (obj && obj->otyp == ACID_VENOM);
  382. X  
  383. X      if(u.uac + tlev <= rnd(20)) {
  384. X          if(Blind || !flags.verbose) pline("It misses.");
  385. X!         else You("are almost hit by %s!", oname);
  386. X          return(0);
  387. X      } else {
  388. X          if(Blind || !flags.verbose) You("are hit!");
  389. X!         else You("are hit by %s!", oname);
  390. X  #ifdef POLYSELF
  391. X          if (obj && obj->otyp == SILVER_ARROW && (u.ulycn != -1 ||
  392. X                  is_demon(uasmon) || u.usym == S_VAMPIRE ||
  393. X                  (u.usym == S_IMP && u.umonnum != PM_TENGU))) {
  394. X              dam += rnd(20);
  395. X!             pline("The %sarrow sears your flesh!",
  396. X                  Blind ? "" : "silver ");
  397. X          }
  398. X          if (acidic && resists_acid(uasmon))
  399. X***************
  400. X*** 268,273 ****
  401. X--- 267,276 ----
  402. X  {
  403. X      struct obj *otmp, *prev;
  404. X  
  405. X+     if (obj->quan > 1) {
  406. X+         obj->quan--;
  407. X+         return;
  408. X+     }
  409. X      prev = ((struct obj *) 0);
  410. X      for (otmp = mon->minvent; otmp; otmp = otmp->nobj) {
  411. X          if (otmp == obj) {
  412. X***************
  413. X*** 315,323 ****
  414. X              || otmp->otyp == CROSSBOW_BOLT) verb = "shoots";
  415. X              otmp->quan = 1;
  416. X              if (canseemon(mtmp))
  417. X!             pline("%s %s a%s %s!", Monnam(mtmp), verb,
  418. X!                 index(vowels,*(xname(otmp))) ? "n" : "",
  419. X!                 xname(otmp));
  420. X              otmp->quan = savequan;
  421. X              m_throw(mtmp->mx, mtmp->my, sgn(tbx), sgn(tby), 
  422. X              movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy), otmp);
  423. X--- 318,324 ----
  424. X              || otmp->otyp == CROSSBOW_BOLT) verb = "shoots";
  425. X              otmp->quan = 1;
  426. X              if (canseemon(mtmp))
  427. X!             pline("%s %s %s!", Monnam(mtmp), verb, an(xname(otmp)));
  428. X              otmp->quan = savequan;
  429. X              m_throw(mtmp->mx, mtmp->my, sgn(tbx), sgn(tby), 
  430. X              movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy), otmp);
  431. X*** src/Old/music.c    Sun Nov 19 13:51:12 1989
  432. X--- src/music.c    Fri Nov 10 11:01:03 1989
  433. X***************
  434. X*** 253,260 ****
  435. X--- 253,262 ----
  436. X                  if (cansee(x,y))
  437. X                  pline("The door collapses.");
  438. X                  levl[x][y].doormask = D_NODOOR;
  439. X+                 mnewsym(x,y);
  440. X                  if (!MON_AT(x, y) && !(x == u.ux && y == u.uy))
  441. X                  newsym(x,y);
  442. X+                 if (cansee(x,y)) prl(x,y);
  443. X                  break;
  444. X              }
  445. X          }
  446. X***************
  447. X*** 280,287 ****
  448. X            charm_snakes((int)u.ulevel*3);
  449. X          break;
  450. X            case MAGIC_FLUTE: /* Make monster fall asleep */
  451. X!         You("produce soft music.");
  452. X!         put_monsters_to_sleep((int)u.ulevel*5);
  453. X          break;
  454. X            case HORN:    /* Awaken monsters or scare monsters */
  455. X          You("produce a frightful, grave sound.");
  456. X--- 282,292 ----
  457. X            charm_snakes((int)u.ulevel*3);
  458. X          break;
  459. X            case MAGIC_FLUTE: /* Make monster fall asleep */
  460. X!         if (instr->spe > 0) {
  461. X!             instr->spe--;
  462. X!             You("produce soft music.");
  463. X!             put_monsters_to_sleep((int)u.ulevel*5);
  464. X!         }
  465. X          break;
  466. X            case HORN:    /* Awaken monsters or scare monsters */
  467. X          You("produce a frightful, grave sound.");
  468. X***************
  469. X*** 317,323 ****
  470. X          break;
  471. X            case MAGIC_HARP:    /* Charm monsters */
  472. X          if (instr->spe > 0) {
  473. X!             pline("The %s produces very attractive music.",xname(instr));
  474. X              instr->spe--;
  475. X              charm_monsters(((int)u.ulevel - 1) / 3 + 1);
  476. X          }
  477. X--- 322,328 ----
  478. X          break;
  479. X            case MAGIC_HARP:    /* Charm monsters */
  480. X          if (instr->spe > 0) {
  481. X!             pline("The %s produces very attractive music.", xname(instr));
  482. X              instr->spe--;
  483. X              charm_monsters(((int)u.ulevel - 1) / 3 + 1);
  484. X          }
  485. X***************
  486. X*** 330,337 ****
  487. X          if (instr->spe > 0) {
  488. X              You("produce a heavy, thunderous rolling!");
  489. X              pline("The entire dungeon is shaking around you!");
  490. X-             do_earthquake(((int)u.ulevel - 1) / 3 + 1);
  491. X              instr->spe--;
  492. X              makeknown(DRUM_OF_EARTHQUAKE);
  493. X          }
  494. X          break;
  495. X--- 335,342 ----
  496. X          if (instr->spe > 0) {
  497. X              You("produce a heavy, thunderous rolling!");
  498. X              pline("The entire dungeon is shaking around you!");
  499. X              instr->spe--;
  500. X+             do_earthquake(((int)u.ulevel - 1) / 3 + 1);
  501. X              makeknown(DRUM_OF_EARTHQUAKE);
  502. X          }
  503. X          break;
  504. X*** src/Old/objects.c    Sun Nov 19 13:51:52 1989
  505. X--- src/objects.c    Tue Nov 14 20:31:49 1989
  506. X***************
  507. X*** 6,11 ****
  508. X--- 6,12 ----
  509. X   * function declarations for all of nethack
  510. X   */
  511. X  #define EXTERN_H
  512. X+ /* #define MAKEDEFS_C    1    /* for Mac compilers with 32K data limit */
  513. X  #include "config.h"
  514. X  #include "obj.h"
  515. X  #include "objclass.h"
  516. X***************
  517. X*** 24,37 ****
  518. X--- 25,52 ----
  519. X  #define C(n)
  520. X  #endif
  521. X  
  522. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  523. X+ struct objclass *objects;
  524. X+ struct small_objclass sm_obj[] = {
  525. X+ #else
  526. X  struct objclass objects[] = {
  527. X+ #endif
  528. X  
  529. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  530. X+     { "strange object", NULL},
  531. X+ #else
  532. X      { "strange object", NULL, NULL, 1,0,0,0,0, 0,
  533. X          ILLOBJ_SYM, 0, 0, 0, 0, 0, 0, 0, C(0) },
  534. X+ #endif
  535. X  /* amulets ... - THE Amulet comes last because it is special */
  536. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  537. X  #define AMULET(name,desc,power,prob,weight) { \
  538. X+     name, desc}
  539. X+ #else
  540. X+ #define AMULET(name,desc,power,prob,weight) { \
  541. X      name, desc, NULL, 0,0,0,0,METAL, power, AMULET_SYM, prob, 0, weight, \
  542. X      150, 0, 0, 0, C(HI_METAL) }
  543. X+ #endif
  544. X  
  545. X      AMULET("amulet of esp",       "circular",    TELEPAT,    190, 2),
  546. X      AMULET("amulet of life saving",   "spherical",    LIFESAVED,   90, 2),
  547. X***************
  548. X*** 41,53 ****
  549. X--- 56,78 ----
  550. X      AMULET("amulet of change",      "square",    0,        150, 2),
  551. X                                  /* POLYMORPH */
  552. X      AMULET("amulet of reflection",      "hexagonal",    REFLECTING,  90, 2),
  553. X+ 
  554. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  555. X+     { "Amulet of Yendor", NULL},
  556. X+ #else
  557. X      { "Amulet of Yendor", NULL, NULL, 1,0,1,0,METAL, 0,
  558. X          AMULET_SYM, 0, 0, 2, 3500, 0, 0, 0, C(HI_METAL) },
  559. X+ #endif
  560. X  #undef AMULET
  561. X  
  562. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  563. X+ #define FOOD(name,prob,delay,wt,uk,tin,nutrition,color) { \
  564. X+     name, NULL}
  565. X+ #else
  566. X  #define FOOD(name,prob,delay,wt,uk,tin,nutrition,color) { \
  567. X      name, NULL, NULL, 1,1,uk,0,tin, 0, FOOD_SYM, prob, delay, wt, \
  568. X      nutrition/20 + 5, 0, 0, nutrition, C(color) }
  569. X+ #endif
  570. X  
  571. X  /* all types of food (except tins & corpses) must have a delay of at least 1. */
  572. X  /* delay on corpses is computed and is weight dependant */
  573. X***************
  574. X*** 64,80 ****
  575. X  #else
  576. X      FOOD("tripe ration",       150, 2, 2, 0, 0, 200, BROWN),
  577. X  #endif
  578. X-     FOOD("dead lizard",        35, 1, 1, 0, 0,  40, GREEN),
  579. X      FOOD("corpse",             0, 1, 0, 0, 0,   0, BROWN),
  580. X!     FOOD("egg",            75, 1, 1, 1, 0,  80, WHITE),
  581. X      /* fruits & veggies */
  582. X!     FOOD("apple",            10, 1, 1, 0, 0,  50, RED),
  583. X!     FOOD("orange",             7, 1, 1, 0, 0,  80, ORANGE_COLORED),
  584. X!     FOOD("pear",             7, 1, 1, 0, 0,  50, GREEN+BRIGHT),
  585. X!     FOOD("melon",             7, 1, 1, 0, 0, 100, GREEN+BRIGHT),
  586. X!     FOOD("banana",             7, 1, 1, 0, 0,  80, YELLOW),
  587. X      FOOD("carrot",            15, 1, 1, 0, 0,  50, ORANGE_COLORED),
  588. X!     FOOD("clove of garlic",      5, 1, 1, 0, 0,  40, WHITE),
  589. X  #ifdef TUTTI_FRUTTI
  590. X      FOOD("slime mold",        75, 1, 1, 0, 0, 250, BROWN),
  591. X  #else
  592. X--- 89,104 ----
  593. X  #else
  594. X      FOOD("tripe ration",       150, 2, 2, 0, 0, 200, BROWN),
  595. X  #endif
  596. X      FOOD("corpse",             0, 1, 0, 0, 0,   0, BROWN),
  597. X!     FOOD("egg",            85, 1, 1, 1, 0,  80, WHITE),
  598. X      /* fruits & veggies */
  599. X!     FOOD("apple",            15, 1, 1, 0, 0,  50, RED),
  600. X!     FOOD("orange",            10, 1, 1, 0, 0,  80, ORANGE_COLORED),
  601. X!     FOOD("pear",            10, 1, 1, 0, 0,  50, GREEN|BRIGHT),
  602. X!     FOOD("melon",            10, 1, 1, 0, 0, 100, GREEN|BRIGHT),
  603. X!     FOOD("banana",            10, 1, 1, 0, 0,  80, YELLOW),
  604. X      FOOD("carrot",            15, 1, 1, 0, 0,  50, ORANGE_COLORED),
  605. X!     FOOD("clove of garlic",      7, 1, 1, 0, 0,  40, WHITE),
  606. X  #ifdef TUTTI_FRUTTI
  607. X      FOOD("slime mold",        75, 1, 1, 0, 0, 250, BROWN),
  608. X  #else
  609. X***************
  610. X*** 83,93 ****
  611. X      /* human food */
  612. X      FOOD("lump of royal jelly",  0, 1, 1, 0, 0, 200, YELLOW),
  613. X      FOOD("cream pie",        25, 1, 1, 0, 0, 100, WHITE),
  614. X!     FOOD("candy bar",         7, 1, 1, 0, 0, 100, BROWN),
  615. X      FOOD("fortune cookie",        55, 1, 1, 0, 0,  40, BROWN),
  616. X  #ifdef TOLKIEN
  617. X      FOOD("pancake",         25, 2, 1, 0, 0, 200, BROWN),
  618. X!     FOOD("lembas wafer",        20, 2, 1, 0, 0, 800, WHITE+BRIGHT),
  619. X      FOOD("cram ration",        20, 3, 3, 0, 0, 600, HI_ORGANIC),
  620. X      FOOD("food ration",       385, 5, 4, 0, 0, 800, HI_ORGANIC),
  621. X  #else
  622. X--- 107,117 ----
  623. X      /* human food */
  624. X      FOOD("lump of royal jelly",  0, 1, 1, 0, 0, 200, YELLOW),
  625. X      FOOD("cream pie",        25, 1, 1, 0, 0, 100, WHITE),
  626. X!     FOOD("candy bar",        13, 1, 1, 0, 0, 100, BROWN),
  627. X      FOOD("fortune cookie",        55, 1, 1, 0, 0,  40, BROWN),
  628. X  #ifdef TOLKIEN
  629. X      FOOD("pancake",         25, 2, 1, 0, 0, 200, BROWN),
  630. X!     FOOD("lembas wafer",        20, 2, 1, 0, 0, 800, WHITE|BRIGHT),
  631. X      FOOD("cram ration",        20, 3, 3, 0, 0, 600, HI_ORGANIC),
  632. X      FOOD("food ration",       385, 5, 4, 0, 0, 800, HI_ORGANIC),
  633. X  #else
  634. X***************
  635. X*** 101,115 ****
  636. X--- 125,154 ----
  637. X      FOOD("tin",            75, 0, 1, 1, METAL, 0, HI_METAL),
  638. X  #undef FOOD
  639. X  
  640. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  641. X+ #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,metal,color) { \
  642. X+     name, app}
  643. X+ #else
  644. X  #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,metal,color) { \
  645. X      name, app, NULL, kn,mg,1,bi,metal, 0, WEAPON_SYM, prob, 0, wt, \
  646. X      cost, sdam, ldam, 0, C(color) }
  647. X+ #endif
  648. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  649. X+ #define PROJECTILE(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop,color) { \
  650. X+     name, app}
  651. X+ #else
  652. X  #define PROJECTILE(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop,color) { \
  653. X      name, app, NULL, kn,1,1,bi,metal, 0, WEAPON_SYM, prob, 0, wt, \
  654. X      cost, sdam, ldam, prop, C(color) }
  655. X+ #endif
  656. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  657. X+ #define BOW(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop,color) { \
  658. X+     name, app}
  659. X+ #else
  660. X  #define BOW(name,app,kn,bi,prob,wt,cost,sdam,ldam,metal,prop,color) { \
  661. X      name, app, NULL, kn,0,1,bi,metal, 0, WEAPON_SYM, prob, 0, wt, \
  662. X      cost, sdam, ldam, -(prop), C(color) }
  663. X+ #endif
  664. X  
  665. X  /* Note: for weapons that don't do an even die of damage (ex. 2-7 or 3-18)
  666. X   * the extra damage is added on in weapon.c, not here! */
  667. X***************
  668. X*** 263,271 ****
  669. X--- 302,315 ----
  670. X  #undef BOW
  671. X  
  672. X  /* tools ... - PICK AXE comes last because it has special characteristics */
  673. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  674. X+ #define TOOL(name,desc,kn,chg,prob,weight,cost,material,color) {\
  675. X+     name, desc}
  676. X+ #else
  677. X  #define TOOL(name,desc,kn,chg,prob,weight,cost,material,color) {\
  678. X      name, desc, NULL, kn,0,chg,chg,material, 0, TOOL_SYM, prob, 0, \
  679. X      weight, cost, 0, 0, 0, C(color)}
  680. X+ #endif
  681. X  
  682. X  #ifdef WALKIES
  683. X      TOOL("leash",        NULL,    1, 0,  70,  3,    20, 0, HI_LEATHER),
  684. X***************
  685. X*** 321,328 ****
  686. X--- 365,383 ----
  687. X      TOOL("drum of earthquake", "drum", 0, 1, 2,  4,    25, 0, BROWN),
  688. X  #endif
  689. X  #undef TOOL
  690. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  691. X+     { "pick-axe", NULL},
  692. X+     { "unicorn horn", NULL},
  693. X+     { "blinding venom", "splash of venom"},
  694. X+     { "acid venom", "splash of venom"},
  695. X+         /* +d6 small or large */
  696. X+     { "heavy iron ball", NULL},
  697. X+     { "iron chain", NULL},
  698. X+ #else
  699. X      { "pick-axe", NULL, NULL, 1,0,1,1,METAL, 0, TOOL_SYM, 20,
  700. X                          0, 10, 50, 6, 3, 0, C(HI_METAL)},
  701. X+     { "unicorn horn", NULL, NULL, 1,0,1,0,0, 0, TOOL_SYM, 0,
  702. X+                         0, 4, 100, 12, 12, 0, C(WHITE)},
  703. X      { "blinding venom", "splash of venom", NULL,
  704. X          0,1,0,0,0, 0, VENOM_SYM, 500, 0, 0, 0, 0, 0, 0, C(HI_ORGANIC)},
  705. X      { "acid venom", "splash of venom", NULL,
  706. X***************
  707. X*** 332,349 ****
  708. X--- 387,415 ----
  709. X          BALL_SYM, 1000, 0, 20, 10, 0, 0, 0, C(HI_METAL)},
  710. X      { "iron chain", NULL, NULL, 1,0,0,0,METAL, 0,
  711. X          CHAIN_SYM, 1000, 0, 20, 0, 0, 0, 0, C(HI_METAL)},
  712. X+ #endif
  713. X  
  714. X      /* Note: boulders and rocks normally do not appear at random; the
  715. X       * probabilities only come into effect when you try to polymorph them.
  716. X       */
  717. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  718. X+     { "boulder", NULL},
  719. X+     { "statue", NULL},
  720. X+ #else
  721. X      { "boulder", NULL, NULL, 1,0,0,0,MINERAL, 0, ROCK_SYM, 100, 0,
  722. X          200 /* > MAX_CARR_CAP */, 0, 20, 20, 0, C(HI_MINERAL)},
  723. X      { "statue", NULL, NULL, 1,0,0,0,MINERAL, 0, ROCK_SYM, 900, 0,
  724. X              250, 0, 20, 20, 0, C(HI_MINERAL)},
  725. X+ #endif
  726. X  
  727. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  728. X+ #define ARMOR(name,desc,kn,blk,power,prob,delay,weight,cost,ac,can,metal,c) \
  729. X+     {name, desc}
  730. X+ #else
  731. X  #define ARMOR(name,desc,kn,blk,power,prob,delay,weight,cost,ac,can,metal,c) \
  732. X      {name, desc, NULL, kn,0,1,blk,metal, power, ARMOR_SYM, prob,\
  733. X      delay, weight, cost, ac, can, 0, C(c)}
  734. X+ #endif
  735. X  #ifdef TOLKIEN
  736. X  ARMOR("elven leather helm", "leather hat",
  737. X              0, 0, 0,  6, 1, 2,   8, 9, 0, 0, HI_LEATHER),
  738. X***************
  739. X*** 371,377 ****
  740. X  ARMOR("plate mail", NULL,
  741. X              1, 1, 0, 44, 5, 9, 600, 3, 2, METAL, HI_METAL),
  742. X  ARMOR("crystal plate mail", NULL,
  743. X!             1, 1, 0, 10, 5, 9, 820, 3, 2, 0, WHITE+BRIGHT),
  744. X  #ifdef SHIRT
  745. X  ARMOR("bronze plate mail", NULL,
  746. X              1, 1, 0, 25, 5, 9, 400, 4, 0, COPPER, HI_COPPER),
  747. X--- 437,443 ----
  748. X  ARMOR("plate mail", NULL,
  749. X              1, 1, 0, 44, 5, 9, 600, 3, 2, METAL, HI_METAL),
  750. X  ARMOR("crystal plate mail", NULL,
  751. X!             1, 1, 0, 10, 5, 9, 820, 3, 2, 0, WHITE|BRIGHT),
  752. X  #ifdef SHIRT
  753. X  ARMOR("bronze plate mail", NULL,
  754. X              1, 1, 0, 25, 5, 9, 400, 4, 0, COPPER, HI_COPPER),
  755. X***************
  756. X*** 483,491 ****
  757. X--- 549,562 ----
  758. X              0, 0, LEVITATION,  12, 2, 4, 30, 9, 0, 0, BROWN),
  759. X  #undef ARMOR
  760. X  
  761. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  762. X+ #define POTION(name,desc,power,prob,cost,color) \
  763. X+     { name, desc}
  764. X+ #else
  765. X  #define POTION(name,desc,power,prob,cost,color) \
  766. X          { name, desc, NULL, 0,1,0,0,0, power,\
  767. X          POTION_SYM, prob, 0, 2, cost, 0, 0, 0, C(color)}
  768. X+ #endif
  769. X  
  770. X  #ifdef SPELLS
  771. X  POTION("fruit juice",        "smoky",    0,    45, 50,    WHITE),
  772. X***************
  773. X*** 496,522 ****
  774. X  POTION("booze",         "bubbly",    0,    65, 50,    WHITE),
  775. X  #endif
  776. X  POTION("gain ability",        "swirly",    0,    45,300,    WHITE),
  777. X! POTION("restore ability",    "pink",        0,    45,100,    MAGENTA+BRIGHT),
  778. X! POTION("sickness",        "ruby",        SICK,    45, 50,    RED),
  779. X  POTION("confusion",        "orange",    CONFUSION, 45, 100, ORANGE_COLORED),
  780. X  POTION("blindness",        "yellow",    BLINDED, 45,150, YELLOW),
  781. X! POTION("paralysis",        "emerald",     0,    45,300,    GREEN+BRIGHT),
  782. X  POTION("speed",         "dark green",     FAST,    45,200,    GREEN),
  783. X  POTION("levitation",        "cyan",        LEVITATION, 45,200, CYAN),
  784. X! POTION("hallucination",     "brilliant blue", HALLUC, 45,100, BLUE+BRIGHT),
  785. X  POTION("invisibility",        "sky blue",    INVIS,    45,150,    CYAN),
  786. X  POTION("see invisible",     "magenta",    SEE_INVIS, 45,50, MAGENTA),
  787. X  POTION("healing",        "purple",     0,    65,100,    MAGENTA),
  788. X  POTION("extra healing",     "purple-red",    0,    50,100,    MAGENTA),
  789. X! POTION("gain level",        "puce",        0,    20,300,    MAGENTA+BRIGHT),
  790. X  POTION("enlightenment",        "brown",    0,    20,200,    BROWN),
  791. X  POTION("monster detection",    "white",    0,    45,150,    WHITE),
  792. X! POTION("object detection",    "glowing",    0,    45,150,    WHITE+BRIGHT),
  793. X  POTION("water",         "clear",    0,    125,100,CYAN),
  794. X  #undef POTION
  795. X  
  796. X! #define SCROLL(name,text,prob,cost) { name, text, NULL, 0,1,0,0,0, 0,\
  797. X          SCROLL_SYM, prob, 0, 3, cost, 0, 0, 0, C(HI_PAPER)}
  798. X  #ifdef MAIL
  799. X      SCROLL("mail",            "KIRJE",         0,   0),
  800. X  #endif
  801. X--- 567,599 ----
  802. X  POTION("booze",         "bubbly",    0,    65, 50,    WHITE),
  803. X  #endif
  804. X  POTION("gain ability",        "swirly",    0,    45,300,    WHITE),
  805. X! POTION("restore ability",    "pink",        0,    45,100,    MAGENTA|BRIGHT),
  806. X! POTION("sickness",        "ruby",        0,    45, 50,    RED),
  807. X  POTION("confusion",        "orange",    CONFUSION, 45, 100, ORANGE_COLORED),
  808. X  POTION("blindness",        "yellow",    BLINDED, 45,150, YELLOW),
  809. X! POTION("paralysis",        "emerald",     0,    45,300,    GREEN|BRIGHT),
  810. X  POTION("speed",         "dark green",     FAST,    45,200,    GREEN),
  811. X  POTION("levitation",        "cyan",        LEVITATION, 45,200, CYAN),
  812. X! POTION("hallucination",     "brilliant blue", HALLUC, 45,100, BLUE|BRIGHT),
  813. X  POTION("invisibility",        "sky blue",    INVIS,    45,150,    CYAN),
  814. X  POTION("see invisible",     "magenta",    SEE_INVIS, 45,50, MAGENTA),
  815. X  POTION("healing",        "purple",     0,    65,100,    MAGENTA),
  816. X  POTION("extra healing",     "purple-red",    0,    50,100,    MAGENTA),
  817. X! POTION("gain level",        "puce",        0,    20,300,    MAGENTA|BRIGHT),
  818. X  POTION("enlightenment",        "brown",    0,    20,200,    BROWN),
  819. X  POTION("monster detection",    "white",    0,    45,150,    WHITE),
  820. X! POTION("object detection",    "glowing",    0,    45,150,    WHITE|BRIGHT),
  821. X  POTION("water",         "clear",    0,    125,100,CYAN),
  822. X  #undef POTION
  823. X  
  824. X! #if defined(MACOS) && !defined(MAKEDEFS_C)
  825. X! #define SCROLL(name,text,prob,cost) \
  826. X!     { name, text}
  827. X! #else
  828. X! #define SCROLL(name,text,prob,cost) \
  829. X!     { name, text, NULL, 0,1,0,0,0, 0,\
  830. X          SCROLL_SYM, prob, 0, 3, cost, 0, 0, 0, C(HI_PAPER)}
  831. X+ #endif
  832. X  #ifdef MAIL
  833. X      SCROLL("mail",            "KIRJE",         0,   0),
  834. X  #endif
  835. X***************
  836. X*** 546,554 ****
  837. X--- 623,636 ----
  838. X      SCROLL(NULL,            "GARVEN DEH",         0, 100),
  839. X  #undef SCROLL
  840. X  
  841. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  842. X  #define WAND(name,typ,prob,cost,flags,metal,c)    { \
  843. X+     name, typ}
  844. X+ #else
  845. X+ #define WAND(name,typ,prob,cost,flags,metal,c)    { \
  846. X      name, typ, NULL, 0,0,1,0,metal, 0, WAND_SYM, \
  847. X      prob, 0, 3, cost, flags, 0, 0, C(c) }
  848. X+ #endif
  849. X  
  850. X  WAND("light",        "glass",    95, 100, NODIR,    GLASS,HI_GLASS),
  851. X  WAND("secret door detection", "balsa",    50, 150, NODIR,    WOOD,HI_WOOD),
  852. X***************
  853. X*** 585,593 ****
  854. X--- 667,680 ----
  855. X  
  856. X  #ifdef SPELLS
  857. X  /* books */
  858. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  859. X  #define SPELL(name,desc,prob,delay,level,flags,color) \
  860. X+     { name, desc}
  861. X+ #else
  862. X+ #define SPELL(name,desc,prob,delay,level,flags,color) \
  863. X      { name, desc, NULL, 0,1,0,0,0, 0, SPBOOK_SYM, prob, delay, \
  864. X      5, level*100, flags, 0, level, C(color)}
  865. X+ #endif
  866. X  
  867. X  SPELL("magic missile",     "parchment",    45,  3, 2, RAY,        HI_PAPER),
  868. X  SPELL("fireball",     "vellum",    20,  6, 4, RAY,        HI_PAPER),
  869. X***************
  870. X*** 597,611 ****
  871. X  SPELL("light",         "cloth",    45,  1, 1, NODIR,    HI_CLOTH),
  872. X  SPELL("detect monsters", "leather",     45,  1, 1, NODIR,    HI_LEATHER),
  873. X  SPELL("healing",     "white",    40,  2, 1, NODIR,    WHITE),
  874. X! SPELL("knock",         "pink",    40,  1, 1, IMMEDIATE,    MAGENTA+BRIGHT),
  875. X  SPELL("force bolt",     "red",        40,  2, 1, IMMEDIATE,    RED),
  876. X  SPELL("confuse monster", "orange",    37,  2, 2, IMMEDIATE,    ORANGE_COLORED),
  877. X  SPELL("cure blindness",  "yellow",     27,  2, 2, IMMEDIATE,    YELLOW),
  878. X! SPELL("slow monster",     "light green",    37,  2, 2, IMMEDIATE,    GREEN+BRIGHT),
  879. X  SPELL("wizard lock",     "dark green",    35,  3, 2, IMMEDIATE,    GREEN),
  880. X! SPELL("create monster",  "turquoise",    37,  3, 2, NODIR,    CYAN+BRIGHT),
  881. X  SPELL("detect food",     "cyan",    37,  3, 2, NODIR,    CYAN),
  882. X! SPELL("cause fear",     "light blue",    25,  3, 3, NODIR,    BLUE+BRIGHT),
  883. X  SPELL("clairvoyance",     "dark blue",    15,  3, 3, NODIR,    BLUE),
  884. X  SPELL("cure sickness",     "indigo",    32,  3, 3, NODIR,    BLUE),
  885. X  SPELL("charm monster",     "magenta",    20,  3, 3, IMMEDIATE,    MAGENTA),
  886. X--- 684,698 ----
  887. X  SPELL("light",         "cloth",    45,  1, 1, NODIR,    HI_CLOTH),
  888. X  SPELL("detect monsters", "leather",     45,  1, 1, NODIR,    HI_LEATHER),
  889. X  SPELL("healing",     "white",    40,  2, 1, NODIR,    WHITE),
  890. X! SPELL("knock",         "pink",    40,  1, 1, IMMEDIATE,    MAGENTA|BRIGHT),
  891. X  SPELL("force bolt",     "red",        40,  2, 1, IMMEDIATE,    RED),
  892. X  SPELL("confuse monster", "orange",    37,  2, 2, IMMEDIATE,    ORANGE_COLORED),
  893. X  SPELL("cure blindness",  "yellow",     27,  2, 2, IMMEDIATE,    YELLOW),
  894. X! SPELL("slow monster",     "light green",    37,  2, 2, IMMEDIATE,    GREEN|BRIGHT),
  895. X  SPELL("wizard lock",     "dark green",    35,  3, 2, IMMEDIATE,    GREEN),
  896. X! SPELL("create monster",  "turquoise",    37,  3, 2, NODIR,    CYAN|BRIGHT),
  897. X  SPELL("detect food",     "cyan",    37,  3, 2, NODIR,    CYAN),
  898. X! SPELL("cause fear",     "light blue",    25,  3, 3, NODIR,    BLUE|BRIGHT),
  899. X  SPELL("clairvoyance",     "dark blue",    15,  3, 3, NODIR,    BLUE),
  900. X  SPELL("cure sickness",     "indigo",    32,  3, 3, NODIR,    BLUE),
  901. X  SPELL("charm monster",     "magenta",    20,  3, 3, IMMEDIATE,    MAGENTA),
  902. X***************
  903. X*** 623,631 ****
  904. X  SPELL("turn undead",     "copper",    17,  8, 6, IMMEDIATE,    HI_COPPER),
  905. X  SPELL("polymorph",     "silver",    12,  8, 6, IMMEDIATE,    HI_SILVER),
  906. X  SPELL("teleport away",     "gold",    15,  6, 6, IMMEDIATE,    HI_GOLD),
  907. X! SPELL("create familiar", "glittering",     10,  7, 6, NODIR,    WHITE+BRIGHT),
  908. X! SPELL("cancellation",     "shining",    12,  8, 7, IMMEDIATE,    WHITE+BRIGHT),
  909. X! SPELL("genocide",     "glowing",     5, 10, 7, NODIR,    WHITE+BRIGHT),
  910. X  SPELL(NULL,         "dull",     0,  0, 0, 0,        HI_PAPER),
  911. X  SPELL(NULL,         "thin",     0,  0, 0, 0,        HI_PAPER),
  912. X  SPELL(NULL,         "thick",     0,  0, 0, 0,        HI_PAPER),
  913. X--- 710,718 ----
  914. X  SPELL("turn undead",     "copper",    17,  8, 6, IMMEDIATE,    HI_COPPER),
  915. X  SPELL("polymorph",     "silver",    12,  8, 6, IMMEDIATE,    HI_SILVER),
  916. X  SPELL("teleport away",     "gold",    15,  6, 6, IMMEDIATE,    HI_GOLD),
  917. X! SPELL("create familiar", "glittering",     10,  7, 6, NODIR,    WHITE|BRIGHT),
  918. X! SPELL("cancellation",     "shining",    12,  8, 7, IMMEDIATE,    WHITE|BRIGHT),
  919. X! SPELL("genocide",     "glowing",     5, 10, 7, NODIR,    WHITE|BRIGHT),
  920. X  SPELL(NULL,         "dull",     0,  0, 0, 0,        HI_PAPER),
  921. X  SPELL(NULL,         "thin",     0,  0, 0, 0,        HI_PAPER),
  922. X  SPELL(NULL,         "thick",     0,  0, 0, 0,        HI_PAPER),
  923. X***************
  924. X*** 632,644 ****
  925. X  #undef SPELL
  926. X  #endif /* SPELLS /**/
  927. X  
  928. X  #define RING(name,stone,power,cost,spec,metal,color) \
  929. X          { name, stone, NULL, 0,0,spec,spec,metal, \
  930. X          power, RING_SYM, 0, 0, 1, cost, 0, 0, 0, C(color)}
  931. X  
  932. X  RING("adornment",    "wooden",    ADORNED,    100, 1, WOOD, HI_WOOD),
  933. X  RING("gain strength",    "granite",    0,        150, 1, MINERAL, HI_MINERAL),
  934. X! RING("increase damage", "coral",    0,        150, 1, MINERAL, RED+BRIGHT),
  935. X  RING("protection",    "black onyx",    PROTECTION,    100, 1, MINERAL, BLACK),
  936. X  RING("regeneration",    "moonstone",    REGENERATION,    200, 0, MINERAL, HI_MINERAL),
  937. X  RING("searching",    "tiger eye",    SEARCHING,    200, 0, MINERAL, BROWN),
  938. X--- 719,736 ----
  939. X  #undef SPELL
  940. X  #endif /* SPELLS /**/
  941. X  
  942. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  943. X+ #define RING(name,stone,power,cost,spec,metal,color) \
  944. X+     { name, stone}
  945. X+ #else
  946. X  #define RING(name,stone,power,cost,spec,metal,color) \
  947. X          { name, stone, NULL, 0,0,spec,spec,metal, \
  948. X          power, RING_SYM, 0, 0, 1, cost, 0, 0, 0, C(color)}
  949. X+ #endif
  950. X  
  951. X  RING("adornment",    "wooden",    ADORNED,    100, 1, WOOD, HI_WOOD),
  952. X  RING("gain strength",    "granite",    0,        150, 1, MINERAL, HI_MINERAL),
  953. X! RING("increase damage", "coral",    0,        150, 1, MINERAL, RED|BRIGHT),
  954. X  RING("protection",    "black onyx",    PROTECTION,    100, 1, MINERAL, BLACK),
  955. X  RING("regeneration",    "moonstone",    REGENERATION,    200, 0, MINERAL, HI_MINERAL),
  956. X  RING("searching",    "tiger eye",    SEARCHING,    200, 0, MINERAL, BROWN),
  957. X***************
  958. X*** 647,653 ****
  959. X  RING("hunger",        "topaz",    HUNGER,     100, 0, MINERAL, CYAN),
  960. X  RING("aggravate monster", "sapphire",    AGGRAVATE_MONSTER, 150, 0, METAL, BLUE),
  961. X  RING("conflict",    "ruby",     CONFLICT,    300, 0, METAL, RED),
  962. X! RING("warning",     "diamond",     WARNING,    100, 0, METAL, WHITE+BRIGHT),
  963. X  RING("poison resistance", "pearl",    POISON_RES,    150, 0, METAL, WHITE),
  964. X  RING("fire resistance", "iron",        FIRE_RES,    200, 0, METAL, HI_METAL),
  965. X  RING("cold resistance", "brass",    COLD_RES,    150, 0, COPPER, HI_COPPER),
  966. X--- 739,745 ----
  967. X  RING("hunger",        "topaz",    HUNGER,     100, 0, MINERAL, CYAN),
  968. X  RING("aggravate monster", "sapphire",    AGGRAVATE_MONSTER, 150, 0, METAL, BLUE),
  969. X  RING("conflict",    "ruby",     CONFLICT,    300, 0, METAL, RED),
  970. X! RING("warning",     "diamond",     WARNING,    100, 0, METAL, WHITE|BRIGHT),
  971. X  RING("poison resistance", "pearl",    POISON_RES,    150, 0, METAL, WHITE),
  972. X  RING("fire resistance", "iron",        FIRE_RES,    200, 0, METAL, HI_METAL),
  973. X  RING("cold resistance", "brass",    COLD_RES,    150, 0, COPPER, HI_COPPER),
  974. X***************
  975. X*** 658,664 ****
  976. X  #ifdef POLYSELF
  977. X  RING("polymorph",    "ivory",    POLYMORPH,    300, 0, 0, WHITE),
  978. X  RING("polymorph control","emerald",    POLYMORPH_CONTROL,
  979. X!                             300, 0, METAL, GREEN+BRIGHT),
  980. X  #endif
  981. X  RING("invisibility",    "wire",        INVIS,        150, 0, METAL, HI_METAL),
  982. X  RING("see invisible",    "engagement",    SEE_INVIS,    150, 0, METAL, HI_METAL),
  983. X--- 750,756 ----
  984. X  #ifdef POLYSELF
  985. X  RING("polymorph",    "ivory",    POLYMORPH,    300, 0, 0, WHITE),
  986. X  RING("polymorph control","emerald",    POLYMORPH_CONTROL,
  987. X!                             300, 0, METAL, GREEN|BRIGHT),
  988. X  #endif
  989. X  RING("invisibility",    "wire",        INVIS,        150, 0, METAL, HI_METAL),
  990. X  RING("see invisible",    "engagement",    SEE_INVIS,    150, 0, METAL, HI_METAL),
  991. X***************
  992. X*** 667,675 ****
  993. X--- 759,772 ----
  994. X  #undef RING
  995. X  
  996. X  /* gems ************************************************************/
  997. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  998. X+ #define GEM(name,desc,prob,wt,gval,glass, color) \
  999. X+     { name, desc}
  1000. X+ #else
  1001. X  #define GEM(name,desc,prob,wt,gval,glass, color) \
  1002. X          { name, desc, NULL, 0,1,0,0,glass, 0,\
  1003. X          GEM_SYM, prob, 0, wt, gval, 3, 3, WP_SLING, C(color)}
  1004. X+ #endif
  1005. X  GEM("dilithium crystal", "white",     3, 1, 4500, MINERAL, WHITE),
  1006. X  GEM("diamond", "white",          4, 1, 4000, MINERAL, WHITE),
  1007. X  GEM("ruby", "red",             5, 1, 3500, MINERAL, RED),
  1008. X***************
  1009. X*** 694,704 ****
  1010. X--- 791,809 ----
  1011. X  GEM("worthless piece of violet glass", "violet",131, 1, 0, GLASS, MAGENTA),
  1012. X  GEM("luckstone", "gray",         10, 1,  60, MINERAL, GRAY),
  1013. X  GEM("loadstone", "gray",         10, 50,  1, MINERAL, GRAY),
  1014. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  1015. X+ { "rock", NULL},
  1016. X+ #else
  1017. X  { "rock", NULL, NULL, 1,1,0,0,MINERAL, 0,
  1018. X          GEM_SYM, 10, 0, 1, 0, 3, 3, WP_SLING, C(HI_MINERAL)},
  1019. X+ #endif
  1020. X  #undef GEM
  1021. X  
  1022. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  1023. X+     { NULL, NULL}
  1024. X+ #else
  1025. X      { NULL, NULL, NULL, 0,0,0,0,0, 0, ILLOBJ_SYM, 0, 0, 0, 0, 0, 0, 0, C(0) }
  1026. X+ #endif
  1027. X  };
  1028. X  
  1029. X  #undef C
  1030. X*** src/Old/objnam.c    Sun Nov 19 13:52:54 1989
  1031. X--- src/objnam.c    Fri Nov 17 19:31:57 1989
  1032. X***************
  1033. X*** 1,4 ****
  1034. X! /*    SCCS Id: @(#)objnam.c    3.0    88/11/30
  1035. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1036. X  /* NetHack may be freely redistributed.  See license for details. */
  1037. X  
  1038. X--- 1,4 ----
  1039. X! /*    SCCS Id: @(#)objnam.c    3.0    89/11/15
  1040. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1041. X  /* NetHack may be freely redistributed.  See license for details. */
  1042. X  
  1043. X***************
  1044. X*** 17,23 ****
  1045. X                  "octagonal", "hexagonal", "wide",
  1046. X                  "notched", "large round", "large square" };
  1047. X  
  1048. X! static int rnd_class P((int,int));
  1049. X  
  1050. X  static int
  1051. X  named_key(s) register char *s; {
  1052. X--- 17,23 ----
  1053. X                  "octagonal", "hexagonal", "wide",
  1054. X                  "notched", "large round", "large square" };
  1055. X  
  1056. X! static int FDECL(rnd_class, (int,int));
  1057. X  
  1058. X  static int
  1059. X  named_key(s) register char *s; {
  1060. X***************
  1061. X*** 80,86 ****
  1062. X  static char buf[BUFSZ];
  1063. X  #endif
  1064. X  register struct objclass *ocl = &objects[otyp];
  1065. X! register char *an = ocl->oc_name;
  1066. X  register char *dn = ocl->oc_descr;
  1067. X  register char *un = ocl->oc_uname;
  1068. X  register int nn = ocl->oc_name_known;
  1069. X--- 80,86 ----
  1070. X  static char buf[BUFSZ];
  1071. X  #endif
  1072. X  register struct objclass *ocl = &objects[otyp];
  1073. X! register char *actualn = ocl->oc_name;
  1074. X  register char *dn = ocl->oc_descr;
  1075. X  register char *un = ocl->oc_uname;
  1076. X  register int nn = ocl->oc_name_known;
  1077. X***************
  1078. X*** 104,110 ****
  1079. X          break;
  1080. X      case AMULET_SYM:
  1081. X          if(nn)
  1082. X!             Strcpy(buf,an);
  1083. X          else
  1084. X              Strcpy(buf,"amulet");
  1085. X          if(un)
  1086. X--- 104,110 ----
  1087. X          break;
  1088. X      case AMULET_SYM:
  1089. X          if(nn)
  1090. X!             Strcpy(buf,actualn);
  1091. X          else
  1092. X              Strcpy(buf,"amulet");
  1093. X          if(un)
  1094. X***************
  1095. X*** 114,120 ****
  1096. X          return(buf);
  1097. X      default:
  1098. X          if(nn) {
  1099. X!             Strcpy(buf, an);
  1100. X              if(otyp >= TURQUOISE && otyp <= JADE)
  1101. X                  Strcat(buf, " stone");
  1102. X              if(un)
  1103. X--- 114,120 ----
  1104. X          return(buf);
  1105. X      default:
  1106. X          if(nn) {
  1107. X!             Strcpy(buf, actualn);
  1108. X              if(otyp >= TURQUOISE && otyp <= JADE)
  1109. X                  Strcat(buf, " stone");
  1110. X              if(un)
  1111. X***************
  1112. X*** 122,128 ****
  1113. X              if(dn)
  1114. X                  Sprintf(eos(buf), " (%s)", dn);
  1115. X          } else {
  1116. X!             Strcpy(buf, dn ? dn : an);
  1117. X              if(ocl->oc_olet == GEM_SYM) {
  1118. X                  if (otyp == LOADSTONE || otyp == LUCKSTONE)
  1119. X                      Strcat(buf, " stone");
  1120. X--- 122,128 ----
  1121. X              if(dn)
  1122. X                  Sprintf(eos(buf), " (%s)", dn);
  1123. X          } else {
  1124. X!             Strcpy(buf, dn ? dn : actualn);
  1125. X              if(ocl->oc_olet == GEM_SYM) {
  1126. X                  if (otyp == LOADSTONE || otyp == LUCKSTONE)
  1127. X                      Strcat(buf, " stone");
  1128. X***************
  1129. X*** 136,142 ****
  1130. X      }
  1131. X      /* here for ring/scroll/potion/wand */
  1132. X      if(nn)
  1133. X!         Sprintf(eos(buf), " of %s", an);
  1134. X      if(un)
  1135. X          Sprintf(eos(buf), " called %s", un);
  1136. X      if(dn)
  1137. X--- 136,142 ----
  1138. X      }
  1139. X      /* here for ring/scroll/potion/wand */
  1140. X      if(nn)
  1141. X!         Sprintf(eos(buf), " of %s", actualn);
  1142. X      if(un)
  1143. X          Sprintf(eos(buf), " called %s", un);
  1144. X      if(dn)
  1145. X***************
  1146. X*** 154,160 ****
  1147. X  char *
  1148. X  distant_name(obj, func)
  1149. X  register struct obj *obj;
  1150. X! char *(*func) P((struct obj *));
  1151. X  {
  1152. X      char *str;
  1153. X  
  1154. X--- 154,160 ----
  1155. X  char *
  1156. X  distant_name(obj, func)
  1157. X  register struct obj *obj;
  1158. X! char *FDECL((*func), (struct obj *));
  1159. X  {
  1160. X      char *str;
  1161. X  
  1162. X***************
  1163. X*** 176,182 ****
  1164. X  #endif
  1165. X  register char *buf = &(bufr[PREFIX]);    /* leave room for "17 -3 " */
  1166. X  register int nn = objects[obj->otyp].oc_name_known;
  1167. X! register char *an = objects[obj->otyp].oc_name;
  1168. X  register char *dn = objects[obj->otyp].oc_descr;
  1169. X  register char *un = objects[obj->otyp].oc_uname;
  1170. X  
  1171. X--- 176,182 ----
  1172. X  #endif
  1173. X  register char *buf = &(bufr[PREFIX]);    /* leave room for "17 -3 " */
  1174. X  register int nn = objects[obj->otyp].oc_name_known;
  1175. X! register char *actualn = objects[obj->otyp].oc_name;
  1176. X  register char *dn = objects[obj->otyp].oc_descr;
  1177. X  register char *un = objects[obj->otyp].oc_uname;
  1178. X  
  1179. X***************
  1180. X*** 187,197 ****
  1181. X          if(obj->otyp == AMULET_OF_YENDOR) {
  1182. X              Strcpy(buf, (obj->spe < 0 && obj->known) ?
  1183. X                 "cheap plastic imitation of the " : "");
  1184. X!             Strcat(buf, an);
  1185. X          } else if (!obj->dknown)
  1186. X              Strcpy(buf, "amulet");
  1187. X          else if (nn)
  1188. X!             Strcpy(buf, an);
  1189. X          else if (un)
  1190. X              Sprintf(buf,"amulet called %s", un);
  1191. X          else
  1192. X--- 187,197 ----
  1193. X          if(obj->otyp == AMULET_OF_YENDOR) {
  1194. X              Strcpy(buf, (obj->spe < 0 && obj->known) ?
  1195. X                 "cheap plastic imitation of the " : "");
  1196. X!             Strcat(buf, actualn);
  1197. X          } else if (!obj->dknown)
  1198. X              Strcpy(buf, "amulet");
  1199. X          else if (nn)
  1200. X!             Strcpy(buf, actualn);
  1201. X          else if (un)
  1202. X              Sprintf(buf,"amulet called %s", un);
  1203. X          else
  1204. X***************
  1205. X*** 202,216 ****
  1206. X              Strcpy(buf, "poisoned ");
  1207. X          case VENOM_SYM:
  1208. X          case TOOL_SYM:
  1209. X!         if(nn)    Strcat(buf, an);
  1210. X          else    Strcat(buf, dn);
  1211. X!         if(obj->otyp == FIGURINE) {
  1212. X!             Sprintf(eos(buf), " of a%s %s",
  1213. X!                 index(vowels, *mons[obj->corpsenm].mname)
  1214. X!                                 ? "n" : "",
  1215. X!                 mons[obj->corpsenm].mname);
  1216. X!             break;
  1217. X!         }
  1218. X          break;
  1219. X          case ARMOR_SYM:
  1220. X          if(obj->otyp==DRAGON_SCALE_MAIL) {
  1221. X--- 202,212 ----
  1222. X              Strcpy(buf, "poisoned ");
  1223. X          case VENOM_SYM:
  1224. X          case TOOL_SYM:
  1225. X!         if(nn)    Strcat(buf, actualn);
  1226. X          else    Strcat(buf, dn);
  1227. X!         if(obj->otyp == FIGURINE)
  1228. X!             Sprintf(eos(buf), " of %s",
  1229. X!                 an(mons[obj->corpsenm].mname));
  1230. X          break;
  1231. X          case ARMOR_SYM:
  1232. X          if(obj->otyp==DRAGON_SCALE_MAIL) {
  1233. X***************
  1234. X*** 221,227 ****
  1235. X  
  1236. X          if(is_boots(obj) || is_gloves(obj)) Strcpy(buf,"pair of ");
  1237. X  
  1238. X!         if(nn)    Strcat(buf, an);
  1239. X          else if(un) {
  1240. X              if(is_boots(obj))
  1241. X                  Strcat(buf,"boots");
  1242. X--- 217,223 ----
  1243. X  
  1244. X          if(is_boots(obj) || is_gloves(obj)) Strcpy(buf,"pair of ");
  1245. X  
  1246. X!         if(nn)    Strcat(buf, actualn);
  1247. X          else if(un) {
  1248. X              if(is_boots(obj))
  1249. X                  Strcat(buf,"boots");
  1250. X***************
  1251. X*** 254,260 ****
  1252. X              break;
  1253. X          }
  1254. X  #endif
  1255. X!         Strcpy(buf, an);
  1256. X          if(obj->otyp == TIN && obj->known) {
  1257. X              if(obj->spe > 0)
  1258. X              Strcat(buf, " of spinach");
  1259. X--- 250,256 ----
  1260. X              break;
  1261. X          }
  1262. X  #endif
  1263. X!         Strcpy(buf, actualn);
  1264. X          if(obj->otyp == TIN && obj->known) {
  1265. X              if(obj->spe > 0)
  1266. X              Strcat(buf, " of spinach");
  1267. X***************
  1268. X*** 266,279 ****
  1269. X          }
  1270. X          break;
  1271. X          case CHAIN_SYM:
  1272. X!         Strcpy(buf, an);
  1273. X          break;
  1274. X          case ROCK_SYM:
  1275. X          if(obj->otyp == STATUE)
  1276. X!             Sprintf(buf, "%s of a%s %s", an,
  1277. X!                 (index(vowels, *(mons[obj->corpsenm].mname))) ? "n" : "",
  1278. X!                 mons[obj->corpsenm].mname);
  1279. X!         else Strcpy(buf, an);
  1280. X          break;
  1281. X          case BALL_SYM:
  1282. X          Sprintf(buf, "%sheavy iron ball",
  1283. X--- 262,273 ----
  1284. X          }
  1285. X          break;
  1286. X          case CHAIN_SYM:
  1287. X!         Strcpy(buf, actualn);
  1288. X          break;
  1289. X          case ROCK_SYM:
  1290. X          if(obj->otyp == STATUE)
  1291. X!             Sprintf(buf, "%s of %s", actualn, an(mons[obj->corpsenm].mname));
  1292. X!         else Strcpy(buf, actualn);
  1293. X          break;
  1294. X          case BALL_SYM:
  1295. X          Sprintf(buf, "%sheavy iron ball",
  1296. X***************
  1297. X*** 291,297 ****
  1298. X                     (obj->blessed || obj->cursed)) {
  1299. X                  Strcat(buf, obj->blessed ? "holy " : "unholy ");
  1300. X                  }
  1301. X!                 Strcat(buf, an);
  1302. X              } else {
  1303. X                  Strcat(buf, " called ");
  1304. X                  Strcat(buf, un);
  1305. X--- 285,291 ----
  1306. X                     (obj->blessed || obj->cursed)) {
  1307. X                  Strcat(buf, obj->blessed ? "holy " : "unholy ");
  1308. X                  }
  1309. X!                 Strcat(buf, actualn);
  1310. X              } else {
  1311. X                  Strcat(buf, " called ");
  1312. X                  Strcat(buf, un);
  1313. X***************
  1314. X*** 306,312 ****
  1315. X          if(!obj->dknown) break;
  1316. X          if(nn) {
  1317. X              Strcat(buf, " of ");
  1318. X!             Strcat(buf, an);
  1319. X          } else if(un) {
  1320. X              Strcat(buf, " called ");
  1321. X              Strcat(buf, un);
  1322. X--- 300,306 ----
  1323. X          if(!obj->dknown) break;
  1324. X          if(nn) {
  1325. X              Strcat(buf, " of ");
  1326. X!             Strcat(buf, actualn);
  1327. X          } else if(un) {
  1328. X              Strcat(buf, " called ");
  1329. X              Strcat(buf, un);
  1330. X***************
  1331. X*** 319,325 ****
  1332. X          if(!obj->dknown)
  1333. X              Sprintf(buf, "wand");
  1334. X          else if(nn)
  1335. X!             Sprintf(buf, "wand of %s", an);
  1336. X          else if(un)
  1337. X              Sprintf(buf, "wand called %s", un);
  1338. X          else
  1339. X--- 313,319 ----
  1340. X          if(!obj->dknown)
  1341. X              Sprintf(buf, "wand");
  1342. X          else if(nn)
  1343. X!             Sprintf(buf, "wand of %s", actualn);
  1344. X          else if(un)
  1345. X              Sprintf(buf, "wand called %s", un);
  1346. X          else
  1347. X***************
  1348. X*** 330,336 ****
  1349. X          if(!obj->dknown)
  1350. X              Sprintf(buf, "spellbook");
  1351. X          else if(nn)
  1352. X!             Sprintf(buf, "spellbook of %s", an);
  1353. X          else if(un)
  1354. X              Sprintf(buf, "spellbook called %s", un);
  1355. X          else
  1356. X--- 324,330 ----
  1357. X          if(!obj->dknown)
  1358. X              Sprintf(buf, "spellbook");
  1359. X          else if(nn)
  1360. X!             Sprintf(buf, "spellbook of %s", actualn);
  1361. X          else if(un)
  1362. X              Sprintf(buf, "spellbook called %s", un);
  1363. X          else
  1364. X***************
  1365. X*** 341,347 ****
  1366. X          if(!obj->dknown)
  1367. X              Sprintf(buf, "ring");
  1368. X          else if(nn)
  1369. X!             Sprintf(buf, "ring of %s", an);
  1370. X          else if(un)
  1371. X              Sprintf(buf, "ring called %s", un);
  1372. X          else
  1373. X--- 335,341 ----
  1374. X          if(!obj->dknown)
  1375. X              Sprintf(buf, "ring");
  1376. X          else if(nn)
  1377. X!             Sprintf(buf, "ring of %s", actualn);
  1378. X          else if(un)
  1379. X              Sprintf(buf, "ring called %s", un);
  1380. X          else
  1381. X***************
  1382. X*** 363,369 ****
  1383. X              else    Sprintf(buf, "%s %s", dn, rock);
  1384. X              break;
  1385. X          }
  1386. X!         Strcpy(buf, an);
  1387. X          if(obj->otyp >= TURQUOISE && obj->otyp <= JADE)
  1388. X              Strcat(buf, " stone");
  1389. X          break;
  1390. X--- 357,363 ----
  1391. X              else    Sprintf(buf, "%s %s", dn, rock);
  1392. X              break;
  1393. X          }
  1394. X!         Strcpy(buf, actualn);
  1395. X          if(obj->otyp >= TURQUOISE && obj->otyp <= JADE)
  1396. X              Strcat(buf, " stone");
  1397. X          break;
  1398. X***************
  1399. X*** 484,490 ****
  1400. X              Sprintf(eos(bp), " (%s keyhole)", lockstr[obj->spe]);
  1401. X              break;
  1402. X          }
  1403. X!         if(obj->otyp == PICK_AXE) goto plus;
  1404. X          if(!objects[obj->otyp].oc_charged) break;
  1405. X          /* if special tool, fall through to show charges */
  1406. X      case WAND_SYM:
  1407. X--- 478,485 ----
  1408. X              Sprintf(eos(bp), " (%s keyhole)", lockstr[obj->spe]);
  1409. X              break;
  1410. X          }
  1411. X!         if(obj->otyp == PICK_AXE || obj->otyp == UNICORN_HORN)
  1412. X!             goto plus;
  1413. X          if(!objects[obj->otyp].oc_charged) break;
  1414. X          /* if special tool, fall through to show charges */
  1415. X      case WAND_SYM:
  1416. X***************
  1417. X*** 539,545 ****
  1418. X          Strcat(bp, " (unpaid)");
  1419. X      if (!strncmp(prefix, "a ", 2) &&
  1420. X              index(vowels, *(prefix+2) ? *(prefix+2) : *bp)
  1421. X!             && (*(prefix+2) || strncmp(bp, "uranium", 7))) {
  1422. X          Strcpy(tmpbuf, prefix);
  1423. X          Strcpy(prefix, "an ");
  1424. X          Strcpy(prefix+3, tmpbuf+2);
  1425. X--- 534,541 ----
  1426. X          Strcat(bp, " (unpaid)");
  1427. X      if (!strncmp(prefix, "a ", 2) &&
  1428. X              index(vowels, *(prefix+2) ? *(prefix+2) : *bp)
  1429. X!             && (*(prefix+2) || (strncmp(bp, "uranium", 7)
  1430. X!                 && strncmp(bp, "unicorn", 7)))) {
  1431. X          Strcpy(tmpbuf, prefix);
  1432. X          Strcpy(prefix, "an ");
  1433. X          Strcpy(prefix+3, tmpbuf+2);
  1434. X***************
  1435. X*** 553,587 ****
  1436. X   */
  1437. X  
  1438. X  char *
  1439. X! singular(otmp)
  1440. X  register struct obj *otmp;
  1441. X  {
  1442. X      int savequan;
  1443. X      char *nam;
  1444. X  
  1445. X      /* Note: using xname for corpses will not give the monster type */
  1446. X!     if (otmp->otyp == CORPSE) {
  1447. X          static char buf[31];
  1448. X  
  1449. X!         sprintf(buf, "%s corpse", mons[otmp->corpsenm].mname);
  1450. X          return buf;
  1451. X      }
  1452. X      savequan = otmp->quan;
  1453. X      otmp->quan = 1;
  1454. X!     nam = xname(otmp);
  1455. X      otmp->quan = savequan;
  1456. X      return nam;
  1457. X  }
  1458. X  
  1459. X! /* used only in mthrowu.c (thitu) */
  1460. X! void
  1461. X! setan(str,buf)
  1462. X! register char *str,*buf;
  1463. X  {
  1464. X!     if(index(vowels,*str))
  1465. X!         Sprintf(buf, "an %s", str);
  1466. X!     else
  1467. X!         Sprintf(buf, "a %s", str);
  1468. X  }
  1469. X  
  1470. X  char *
  1471. X--- 549,602 ----
  1472. X   */
  1473. X  
  1474. X  char *
  1475. X! singular(otmp, func)
  1476. X  register struct obj *otmp;
  1477. X+ char *FDECL((*func), (struct obj *));
  1478. X  {
  1479. X      int savequan;
  1480. X      char *nam;
  1481. X  
  1482. X      /* Note: using xname for corpses will not give the monster type */
  1483. X!     if (otmp->otyp == CORPSE && func == xname) {
  1484. X          static char buf[31];
  1485. X  
  1486. X!         Sprintf(buf, "%s corpse", mons[otmp->corpsenm].mname);
  1487. X          return buf;
  1488. X      }
  1489. X      savequan = otmp->quan;
  1490. X      otmp->quan = 1;
  1491. X!     nam = (*func)(otmp);
  1492. X      otmp->quan = savequan;
  1493. X      return nam;
  1494. X  }
  1495. X  
  1496. X! char *
  1497. X! an(str)
  1498. X! register char *str;
  1499. X  {
  1500. X!     static char buf[BUFSZ];
  1501. X! 
  1502. X!     buf[0] = '\0';
  1503. X! 
  1504. X!     if (strncmp(str, "the ", 4))
  1505. X!         if (index(vowels, *str) &&
  1506. X!         strncmp(str, "unicorn", 7) &&
  1507. X!         strncmp(str, "uranium", 7))
  1508. X!             Strcpy(buf, "an ");
  1509. X!         else
  1510. X!             Strcpy(buf, "a ");
  1511. X! 
  1512. X!     Strcat(buf, str);
  1513. X!     return buf;
  1514. X! }
  1515. X! 
  1516. X! char *
  1517. X! An(str)
  1518. X! register char *str;
  1519. X! {
  1520. X!     str = an(str);
  1521. X!     if (*str == 'a') *str = 'A';
  1522. X!     return str;
  1523. X  }
  1524. X  
  1525. X  char *
  1526. X***************
  1527. X*** 752,758 ****
  1528. X      }
  1529. X  
  1530. X      /* fungus/fungi, homunculus/homunculi, but wumpuses */
  1531. X!     if (!strcmp(spot-1, "us") && strcmp(spot-6, "wumpus")) {
  1532. X          *(spot--) = (char)0;
  1533. X          *spot = 'i';
  1534. X          goto bottom;
  1535. X--- 767,773 ----
  1536. X      }
  1537. X  
  1538. X      /* fungus/fungi, homunculus/homunculi, but wumpuses */
  1539. X!     if (!strcmp(spot-1, "us") && strcmp(spot-5, "wumpus")) {
  1540. X          *(spot--) = (char)0;
  1541. X          *spot = 'i';
  1542. X          goto bottom;
  1543. X***************
  1544. X*** 838,851 ****
  1545. X      return str;
  1546. X  }
  1547. X  
  1548. X! static const char *armor_classes[] = {
  1549. X!     /* "shield called reflection" gives a specific type of shield.
  1550. X!      * "shield" gives a random type of shield--but not of all armor.
  1551. X!      */
  1552. X!     "gloves", "boots", "cloak", "shield", "helmet"
  1553. X  };
  1554. X! #define ARMOR_CLASSES 5
  1555. X  
  1556. X  /* Return something wished for.  If not an object, return &zeroobj; if an error
  1557. X   * (no matching object), return (struct obj *)0.  Giving readobjnam() a null
  1558. X   * pointer skips the error return and creates a random object instead.
  1559. X--- 853,944 ----
  1560. X      return str;
  1561. X  }
  1562. X  
  1563. X! /* wishable subranges of objects */
  1564. X! static const struct o_range {
  1565. X!     char *name, osym;
  1566. X!     int  f_o_range, l_o_range;
  1567. X! } o_ranges[] = {
  1568. X!     { "bag",    TOOL_SYM,   SACK,        BAG_OF_TRICKS },
  1569. X!     { "gloves",    ARMOR_SYM,  LEATHER_GLOVES, GAUNTLETS_OF_DEXTERITY },
  1570. X!     { "gauntlets",    ARMOR_SYM,  LEATHER_GLOVES, GAUNTLETS_OF_DEXTERITY },
  1571. X!     { "boots",    ARMOR_SYM,  LOW_BOOTS,        LEVITATION_BOOTS },
  1572. X!     { "shoes",    ARMOR_SYM,  LOW_BOOTS,        IRON_SHOES },
  1573. X!     { "cloak",    ARMOR_SYM,  MUMMY_WRAPPING, CLOAK_OF_DISPLACEMENT },
  1574. X!     { "shield",    ARMOR_SYM,  SMALL_SHIELD,   SHIELD_OF_REFLECTION },
  1575. X! #ifdef TOLKIEN    /* note: "helmet" is a specific item */
  1576. X!     { "helm",    ARMOR_SYM,  ELVEN_LEATHER_HELM, HELM_OF_TELEPATHY },
  1577. X! #else
  1578. X!     { "helm",    ARMOR_SYM,  ORCISH_HELM,    HELM_OF_TELEPATHY },
  1579. X! #endif
  1580. X!     { "sword",    WEAPON_SYM, SHORT_SWORD,    KATANA }
  1581. X  };
  1582. X! 
  1583. X! 
  1584. X! /*
  1585. X!  * Singularize a string the user typed in; this helps reduce the complexity
  1586. X!  * of readobjnam.
  1587. X!  */
  1588. X! 
  1589. X! static
  1590. X! void
  1591. X! singularize(bp)
  1592. X! char *bp;
  1593. X! {
  1594. X!     char *p;
  1595. X  
  1596. X+     /* find "cloves of garlic", "worthless pieces of blue glass" */
  1597. X+     for(p = bp; *p; p++) 
  1598. X+         if(!strncmp(p, "s of ", 5)){
  1599. X+         /* but don't singularize "gauntlets" */
  1600. X+         if(strncmp(p-8, "gauntlet", 8))
  1601. X+             while(*p = p[1]) p++;
  1602. X+         return;
  1603. X+         }
  1604. X+ 
  1605. X+     /* remove -s or -es (boxes) or -ies (rubies) */
  1606. X+     p = eos(bp);
  1607. X+     if(p[-1] == 's') {
  1608. X+         if(p[-2] == 'e') {
  1609. X+             if(p[-3] == 'i') {
  1610. X+                 if(!strcmp(p-7, "cookies") ||
  1611. X+                    !strcmp(p-4, "pies"))
  1612. X+                     goto mins;
  1613. X+                 Strcpy(p-3, "y");
  1614. X+                 return;
  1615. X+             }
  1616. X+ 
  1617. X+             /* note: cloves / knives from clove / knife */
  1618. X+             if(!strcmp(p-6, "knives")) {
  1619. X+                 Strcpy(p-3, "fe");
  1620. X+                 return;
  1621. X+             }
  1622. X+ 
  1623. X+             if(!strcmp(p-6, "staves")) {
  1624. X+                 Strcpy(p-3, "ff");
  1625. X+                 return;
  1626. X+             }
  1627. X+ 
  1628. X+             /* note: nurses, axes but boxes */
  1629. X+             if(!strcmp(p-5, "boxes")) {
  1630. X+                 p[-2] = 0;
  1631. X+                 return;
  1632. X+             }
  1633. X+         }
  1634. X+         /* but don't singularize boots or gloves */
  1635. X+         else if(!strcmp(p-5, "boots") ||
  1636. X+             !strcmp(p-6, "gloves"))
  1637. X+                 return;
  1638. X+     mins:
  1639. X+         p[-1] = 0;
  1640. X+     } else {
  1641. X+         if(!strcmp(p-5, "teeth")) {
  1642. X+             Strcpy(p-5, "tooth");
  1643. X+             return;
  1644. X+         }
  1645. X+         /* here we cannot find the plural suffix */
  1646. X+     }
  1647. X+ }
  1648. X+ 
  1649. X  /* Return something wished for.  If not an object, return &zeroobj; if an error
  1650. X   * (no matching object), return (struct obj *)0.  Giving readobjnam() a null
  1651. X   * pointer skips the error return and creates a random object instead.
  1652. X***************
  1653. X*** 994,1002 ****
  1654. X          /* "helmet called telepathy" is not "helmet" (a specific type)
  1655. X           * "shield called reflection" is not "shield" (a general type)
  1656. X           */
  1657. X!         for(i=0; i<ARMOR_CLASSES; i++)
  1658. X!             if(!strncmp(bp,armor_classes[i], strlen(armor_classes[i]))){
  1659. X!             let = ARMOR_SYM;
  1660. X              goto srch;
  1661. X              }
  1662. X      }
  1663. X--- 1087,1095 ----
  1664. X          /* "helmet called telepathy" is not "helmet" (a specific type)
  1665. X           * "shield called reflection" is not "shield" (a general type)
  1666. X           */
  1667. X!         for(i = 0; i < SIZE(o_ranges); i++)
  1668. X!             if(!strcmp(bp, o_ranges[i].name)) {
  1669. X!             let = o_ranges[i].osym;
  1670. X              goto srch;
  1671. X              }
  1672. X      }
  1673. X***************
  1674. X*** 1042,1100 ****
  1675. X      }
  1676. X  
  1677. X      /* first change to singular if necessary */
  1678. X!     if(cnt != 1) {
  1679. X!         /* find "cloves of garlic", "worthless pieces of blue glass" */
  1680. X!         for(p = bp; *p; p++) 
  1681. X!             if(!strncmp(p, "s of ", 5)){
  1682. X!             /* but don't singularize "gauntlets" */
  1683. X!             if(strncmp(p-8, "gauntlet", 8))
  1684. X!                 while(*p = p[1]) p++;
  1685. X!             goto sing;
  1686. X!             }
  1687. X!         /* remove -s or -es (boxes) or -ies (rubies) */
  1688. X!         p = eos(bp);
  1689. X!         if(p[-1] == 's') {
  1690. X!             if(p[-2] == 'e') {
  1691. X!                 if(p[-3] == 'i') {
  1692. X! 
  1693. X!                     if(!strcmp(p-7, "cookies") ||
  1694. X!                        !strcmp(p-4, "pies"))
  1695. X!                         goto mins;
  1696. X!                     Strcpy(p-3, "y");
  1697. X!                     goto sing;
  1698. X!                 }
  1699. X! 
  1700. X!                 /* note: cloves / knives from clove / knife */
  1701. X!                 if(!strcmp(p-6, "knives")) {
  1702. X!                     Strcpy(p-3, "fe");
  1703. X!                     goto sing;
  1704. X!                 }
  1705. X! 
  1706. X!                 if(!strcmp(p-6, "staves")) {
  1707. X!                     Strcpy(p-3, "ff");
  1708. X!                     goto sing;
  1709. X!                 }
  1710. X  
  1711. X-                 /* note: nurses, axes but boxes */
  1712. X-                 if(!strcmp(p-5, "boxes")) {
  1713. X-                     p[-2] = 0;
  1714. X-                     goto sing;
  1715. X-                 }
  1716. X-             }
  1717. X-             /* but don't singularize boots or gloves */
  1718. X-             else if(!strcmp(p-5, "boots") ||
  1719. X-                 !strcmp(p-6, "gloves"))
  1720. X-                     goto sing;
  1721. X-         mins:
  1722. X-             p[-1] = 0;
  1723. X-         } else {
  1724. X-             if(!strcmp(p-5, "teeth")) {
  1725. X-                 Strcpy(p-5, "tooth");
  1726. X-                 goto sing;
  1727. X-             }
  1728. X-             /* here we cannot find the plural suffix */
  1729. X-         }
  1730. X-     }
  1731. X  sing:
  1732. X      /* Maybe we need a special strcmp() which ignores capitalization and
  1733. X       * dashes/spaces/underscores, so the below 3 special cases would be
  1734. X--- 1135,1143 ----
  1735. X      }
  1736. X  
  1737. X      /* first change to singular if necessary */
  1738. X!     if(cnt != 1)
  1739. X!         singularize(bp);
  1740. X  
  1741. X  sing:
  1742. X      /* Maybe we need a special strcmp() which ignores capitalization and
  1743. X       * dashes/spaces/underscores, so the below 3 special cases would be
  1744. X***************
  1745. X*** 1229,1255 ****
  1746. X          typ = HEAVY_IRON_BALL;
  1747. X          goto typfnd;
  1748. X      }
  1749. X!     if(!strcmp(bp, "bag")) {
  1750. X!         typ = rnd_class(SACK, BAG_OF_TRICKS);
  1751. X!         goto typfnd;
  1752. X!     }
  1753. X!     if(!strcmp(bp, armor_classes[0])){ /* pair of gloves */
  1754. X!         typ = rnd_class(LEATHER_GLOVES, GAUNTLETS_OF_DEXTERITY);
  1755. X!         goto typfnd;
  1756. X!     }
  1757. X!     if(!strcmp(bp, armor_classes[1])){ /* pair of boots */
  1758. X!         typ = rnd_class(LOW_BOOTS, LEVITATION_BOOTS);
  1759. X!         goto typfnd;
  1760. X!     }
  1761. X!     if(!strcmp(bp, armor_classes[2])){ /* cloak */
  1762. X!         typ = rnd_class(MUMMY_WRAPPING, CLOAK_OF_DISPLACEMENT);
  1763. X!         goto typfnd;
  1764. X!     }
  1765. X!     if(!strcmp(bp, armor_classes[3])){ /* shield */
  1766. X!         typ = rnd_class(SMALL_SHIELD, SHIELD_OF_REFLECTION);
  1767. X          goto typfnd;
  1768. X!     }
  1769. X!     /* helmet is not generic */
  1770. X  
  1771. X      an = bp;
  1772. X      if (!dn) dn = an; /* ex. "black cap" */
  1773. X--- 1272,1282 ----
  1774. X          typ = HEAVY_IRON_BALL;
  1775. X          goto typfnd;
  1776. X      }
  1777. X!     for (i = 0; i < SIZE(o_ranges); i++)
  1778. X!         if(!strcmp(bp, o_ranges[i].name)) {
  1779. X!         typ = rnd_class(o_ranges[i].f_o_range, o_ranges[i].l_o_range);
  1780. X          goto typfnd;
  1781. X!         }
  1782. X  
  1783. X      an = bp;
  1784. X      if (!dn) dn = an; /* ex. "black cap" */
  1785. X***************
  1786. X*** 1332,1337 ****
  1787. X--- 1359,1365 ----
  1788. X      else if (wizard) /* no alteration to spe */ ;
  1789. X  #endif
  1790. X      else if (let == ARMOR_SYM || let == WEAPON_SYM || typ == PICK_AXE ||
  1791. X+             typ == UNICORN_HORN ||
  1792. X              (let==RING_SYM && objects[typ].oc_charged)) {
  1793. X          if(spe > rnd(5) && spe > otmp->spe) spe = 0;
  1794. X          if(spe > 2 && u.uluck < 0) spesgn = -1;
  1795. X***************
  1796. X*** 1461,1467 ****
  1797. X      if (name) otmp = oname(otmp, name, 0);
  1798. X      otmp->owt = weight(otmp);
  1799. X      if (heavy) otmp->owt += 15;
  1800. X!     if (halfeaten && otmp->olet == FOOD_SYM) otmp->oeaten = TRUE;
  1801. X      return(otmp);
  1802. X  }
  1803. X  
  1804. X--- 1489,1503 ----
  1805. X      if (name) otmp = oname(otmp, name, 0);
  1806. X      otmp->owt = weight(otmp);
  1807. X      if (heavy) otmp->owt += 15;
  1808. X!     if (halfeaten && otmp->olet == FOOD_SYM) {
  1809. X!         if (otmp->otyp == CORPSE)
  1810. X!             otmp->oeaten = mons[otmp->corpsenm].cnutrit;
  1811. X!         else otmp->oeaten = objects[otmp->otyp].nutrition;
  1812. X!         otmp->owt /= 2;
  1813. X!         otmp->oeaten /= 2;
  1814. X!         if (!otmp->owt) otmp->owt = 1;
  1815. X!         if (!otmp->oeaten) otmp->oeaten = 1;
  1816. X!     }
  1817. X      return(otmp);
  1818. X  }
  1819. X  
  1820. X*** src/Old/options.c    Sun Nov 19 13:53:46 1989
  1821. X--- src/options.c    Fri Nov 17 19:31:59 1989
  1822. X***************
  1823. X*** 1,4 ****
  1824. X! /*    SCCS Id: @(#)options.c    3.0    88/11/09
  1825. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1826. X  /* NetHack may be freely redistributed.  See license for details. */
  1827. X  
  1828. X--- 1,4 ----
  1829. X! /*    SCCS Id: @(#)options.c    3.0    89/11/15
  1830. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1831. X  /* NetHack may be freely redistributed.  See license for details. */
  1832. X  
  1833. X***************
  1834. X*** 5,12 ****
  1835. X  #include "hack.h"
  1836. X  static boolean set_order;
  1837. X  
  1838. X! static void nmcpy P((char *, char *, int));
  1839. X! static int next_opt P((char *));
  1840. X  
  1841. X  void
  1842. X  initoptions()
  1843. X--- 5,12 ----
  1844. X  #include "hack.h"
  1845. X  static boolean set_order;
  1846. X  
  1847. X! static void FDECL(nmcpy, (char *, char *, int));
  1848. X! static int FDECL(next_opt, (char *));
  1849. X  
  1850. X  void
  1851. X  initoptions()
  1852. X***************
  1853. X*** 143,192 ****
  1854. X  register unsigned int *graph_ints;
  1855. X  register int glth;
  1856. X  {
  1857. X! #define SETPCHAR(f, n)    showsyms.f = (glth > n) ? graph_ints[n] : defsyms.f
  1858. X!     SETPCHAR(stone, 0);
  1859. X!     SETPCHAR(vwall, 1);
  1860. X!     SETPCHAR(hwall, 2);
  1861. X!     SETPCHAR(tlcorn, 3);
  1862. X!     SETPCHAR(trcorn, 4);
  1863. X!     SETPCHAR(blcorn, 5);
  1864. X!     SETPCHAR(brcorn, 6);
  1865. X!     SETPCHAR(crwall, 7);
  1866. X!     SETPCHAR(tuwall, 8);
  1867. X!     SETPCHAR(tdwall, 9);
  1868. X!     SETPCHAR(tlwall, 10);
  1869. X!     SETPCHAR(trwall, 11);
  1870. X!     SETPCHAR(vbeam, 12);
  1871. X!     SETPCHAR(hbeam, 13);
  1872. X!     SETPCHAR(lslant, 14);
  1873. X!     SETPCHAR(rslant, 15);
  1874. X!     SETPCHAR(door, 16);
  1875. X!     SETPCHAR(room, 17);
  1876. X!     SETPCHAR(corr, 18);
  1877. X!     SETPCHAR(upstair, 19);
  1878. X!     SETPCHAR(dnstair, 20);
  1879. X!     SETPCHAR(trap, 21);
  1880. X!     SETPCHAR(web, 22);
  1881. X!     SETPCHAR(pool, 23);
  1882. X! #ifdef FOUNTAINS
  1883. X!     SETPCHAR(fountain, 24);
  1884. X! #endif
  1885. X! #ifdef SINKS
  1886. X!     SETPCHAR(sink, 25);
  1887. X! #endif
  1888. X! #ifdef THRONES
  1889. X!     SETPCHAR(throne, 26);
  1890. X! #endif
  1891. X! #ifdef ALTARS
  1892. X!     SETPCHAR(altar, 27);
  1893. X! #endif
  1894. X! #ifdef STRONGHOLD
  1895. X!     SETPCHAR(upladder, 28);
  1896. X!     SETPCHAR(dnladder, 29);
  1897. X!     SETPCHAR(dbvwall, 30);
  1898. X!     SETPCHAR(dbhwall, 31);
  1899. X! #endif
  1900. X! #undef SETPCHAR
  1901. X  }
  1902. X  
  1903. X  void
  1904. X--- 143,155 ----
  1905. X  register unsigned int *graph_ints;
  1906. X  register int glth;
  1907. X  {
  1908. X!     register int i;
  1909. X! 
  1910. X!     if (glth > MAXPCHARS) glth = MAXPCHARS;        /* sanity check */
  1911. X!     for (i = 0; i < glth; i++)
  1912. X!         showsyms[i] = graph_ints[i];
  1913. X!     for (i = glth; i < MAXPCHARS; i++)
  1914. X!         showsyms[i] = defsyms[i];
  1915. X  }
  1916. X  
  1917. X  void
  1918. END_OF_FILE
  1919. if test 57020 -ne `wc -c <'patches06i'`; then
  1920.     echo shar: \"'patches06i'\" unpacked with wrong size!
  1921. fi
  1922. # end of 'patches06i'
  1923. fi
  1924. echo shar: End of archive 9 \(of 15\).
  1925. cp /dev/null ark9isdone
  1926. MISSING=""
  1927. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
  1928.     if test ! -f ark${I}isdone ; then
  1929.     MISSING="${MISSING} ${I}"
  1930.     fi
  1931. done
  1932. if test "${MISSING}" = "" ; then
  1933.     echo You have unpacked all 15 archives.
  1934.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1935. else
  1936.     echo You still need to unpack the following archives:
  1937.     echo "        " ${MISSING}
  1938. fi
  1939. ##  End of shell archive.
  1940. exit 0
  1941.